package com.beiding.mpTimer;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;


/**
 * 负载处理器
 *
 * @param <T> 负载
 */
public abstract class Handler<T extends Serializable> {

    //负载的类型
    private Class<T> type;

    private String topic;

    /**
     * @param topic 当前处理器的主题.每个处理器都有一个主题,该主题标志着任务的状态
     */
    protected Handler(String topic) {

        this.topic = topic;

        //利用反射获取type
        Type[] types = ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments();
        this.type = (Class<T>) types[0];
    }

    String getTopic() {
        return topic;
    }

    Class<T> getType() {
        return type;
    }

    //负载的处理逻辑
    protected abstract void handle(T payload, long time);
}
